
// <copyright file="IRequestHandler.cs" company="Subhadra Software Solutions">
//   
// </copyright>
// <summary>
//   Represents a request handler of a IRequest.
// </summary>

namespace SubhadraSolutions.Sharp.Utils.RequestProcessing
{
    using SubhadraSolutions.Sharp.Utils.RequestProcessing.Core;

    /// <summary>
    /// Represents a request handler of a IRequest.
    /// </summary>
    /// <typeparam name="TRequest">
    /// The type of the attribute request.
    /// </typeparam>
    public interface IRequestHandler<in TRequest> : IRequestHandler
        where TRequest : IRequest
    {
        #region Public Methods and Operators

        /// <summary>
        /// Processes the request.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// IResponse{`0}.
        /// </returns>
        IResponse ProcessRequest(TRequest request);

        #endregion Public Methods and Operators
    }
}